/**
 * 日期处理工具函数
 * 创建时间：2025-09-11
 * 作者：开发团队
 * 目的：提供日期格式化和处理功能
 */

/**
 * 格式化日期时间
 * :param dateStr: 日期字符串或Date对象
 * :param format: 格式化模式，默认'YYYY-MM-DD HH:mm:ss'
 * :return: 格式化后的日期字符串
 */
export const formatDateTime = (
  dateStr: string | Date,
  format: string = 'YYYY-MM-DD HH:mm:ss'
): string => {
  if (!dateStr) return ''
  
  const date = new Date(dateStr)
  
  if (isNaN(date.getTime())) {
    return ''
  }
  
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')
  
  return format
    .replace('YYYY', String(year))
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds)
}

/**
 * 格式化日期（不包含时间）
 * :param dateStr: 日期字符串或Date对象
 * :return: 格式化后的日期字符串 YYYY-MM-DD
 */
export const formatDate = (dateStr: string | Date): string => {
  return formatDateTime(dateStr, 'YYYY-MM-DD')
}

/**
 * 格式化时间（不包含日期）
 * :param dateStr: 日期字符串或Date对象
 * :return: 格式化后的时间字符串 HH:mm:ss
 */
export const formatTime = (dateStr: string | Date): string => {
  return formatDateTime(dateStr, 'HH:mm:ss')
}

/**
 * 获取相对时间描述
 * :param dateStr: 日期字符串或Date对象
 * :return: 相对时间描述，如\"刚刚\"、\"5分钟前\"等
 */
export const getRelativeTime = (dateStr: string | Date): string => {
  if (!dateStr) return ''
  
  const date = new Date(dateStr)
  const now = new Date()
  const diff = now.getTime() - date.getTime()
  
  if (diff < 0) {
    return '未来时间'
  }
  
  const seconds = Math.floor(diff / 1000)
  const minutes = Math.floor(seconds / 60)
  const hours = Math.floor(minutes / 60)
  const days = Math.floor(hours / 24)
  
  if (seconds < 30) {
    return '刚刚'
  } else if (seconds < 60) {
    return `${seconds}秒前`
  } else if (minutes < 60) {
    return `${minutes}分钟前`
  } else if (hours < 24) {
    return `${hours}小时前`
  } else if (days < 7) {
    return `${days}天前`
  } else {
    return formatDate(date)
  }
}

/**
 * 检查日期是否为今天
 * :param dateStr: 日期字符串或Date对象
 * :return: 是否为今天
 */
export const isToday = (dateStr: string | Date): boolean => {
  if (!dateStr) return false
  
  const date = new Date(dateStr)
  const today = new Date()
  
  return (
    date.getFullYear() === today.getFullYear() &&
    date.getMonth() === today.getMonth() &&
    date.getDate() === today.getDate()
  )
}

/**
 * 获取今天的日期字符串
 * :return: 今天的日期字符串 YYYY-MM-DD
 */
export const getTodayDate = (): string => {
  return formatDate(new Date())
}

/**
 * 获取本周的开始和结束日期
 * :return: 本周的开始和结束日期
 */
export const getThisWeekRange = (): { start: string; end: string } => {
  const now = new Date()
  const dayOfWeek = now.getDay()
  const startDate = new Date(now)
  startDate.setDate(now.getDate() - dayOfWeek)
  
  const endDate = new Date(startDate)
  endDate.setDate(startDate.getDate() + 6)
  
  return {
    start: formatDate(startDate),
    end: formatDate(endDate)
  }
}

/**
 * 获取本月的开始和结束日期
 * :return: 本月的开始和结束日期
 */
export const getThisMonthRange = (): { start: string; end: string } => {
  const now = new Date()
  const startDate = new Date(now.getFullYear(), now.getMonth(), 1)
  const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0)
  
  return {
    start: formatDate(startDate),
    end: formatDate(endDate)
  }
}